package com.ecjtu.stadiumre_servations.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ecjtu.stadiumre_servations.entity.domain.GroupMember;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ecjtu.stadiumre_servations.entity.domain.User;
import com.ecjtu.stadiumre_servations.response.Result;

import java.util.List;

/**
 * 拼团成员服务接口
 * 定义拼团成员相关的业务方法
 */
public interface GroupMemberService extends IService<GroupMember> {

    /**
     * 根据拼团记录ID查询所有成员
     * @param groupRecordId 拼团记录ID
     * @return 成员列表，按加入时间升序排列
     */
    Result selectByRecordId(String groupRecordId);

    /**
     * 根据用户ID查询其参与的所有拼团
     * @param userId 用户ID
     * @return 拼团成员记录列表，按加入时间降序排列
     */
    Result selectByUserId(String userId);



    /**
     * 检查用户是否已在拼团中
     * @param userId 用户ID
     * @param groupRecordId 拼团记录ID
     * @return true-已在拼团中，false-未在拼团中
     */
    Result isUserInGroup(String userId, String groupRecordId);

    /**
     * 查询用户在特定时间段参与的拼团
     * @param userId 用户ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 符合条件的拼团成员记录列表
     */
    Result selectByUserAndTimeRange(String userId, String startTime, String endTime);

    /**
     * 分页查询拼团成员
     * @param page 分页参数
     * @param recordId 拼团记录ID
     * @return 分页后的成员列表
     */
    Result selectPageByRecordId(Page<GroupMember> page, String recordId);

    /**
     * 查询拼团的团长信息
     * @param recordId 拼团记录ID
     * @return 团长成员记录，如果不存在则返回null
     */
    Result selectLeaderByRecordId(String recordId);

    /**
     * 查询用户作为团长的所有拼团
     * @param userId 用户ID
     * @return 拼团成员记录列表，按加入时间降序排列
     */
    Result selectLeaderGroupsByUserId(String userId);



    /**
     * 删除拼团的所有成员
     * @param groupRecordId 拼团记录ID
     * @return true-删除成功，false-删除失败
     */
    Result deleteByRecordId(String groupRecordId);
    Result exitTheGroup(String groupRecordId,String userId);
}